package com.design.patterns.creativeModel.facade;

import com.design.patterns.creativeModel.facade.service.Facade;
import org.springframework.beans.factory.annotation.Autowired;

/**
 * 外观模式
 * 目的：为子系统中的一组接口提供一个一致的界面。Facade模式定义了一个高层接口，这个接口使得这一子系统更加容易使用。
 * 基本思想：
 * 如果客户端要跟许多子系统打交道，那么客户端需要了解各个子系统的接口，比较麻烦。如果有一个统一的“中介”，
 * 让客户端只跟中介打交道，中介再去跟各个子系统打交道，对客户端来说就比较简单。所以Facade就相当于搞了一个中介。
 *
 * web开发中的Gateway，本质上也是一种外观模式
 */
public class FacadeMain {
    /**
     * 本质上是将同一流程的东西放在一个接口中进行实现
     * 我们以注册公司为例，假设注册公司需要三步：
     *      向工商局申请公司营业执照；AdminOfIndustry
     *      在银行开设账户；Bank
     *      在税务局开设纳税号。Taxation
     * 现在我们实现一个外观模式：Facade，只需要传入对应的值，即可完成注册公司
     */

    public static void main(String[] args) {
        System.out.println(Facade.INSTANCE.openCompany("大聪明公司", "123456789", "789654"));
    }
}
